package com.monolithiot.notifier.service;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * 2018/11/12 Create by 郭文梁
 * BaseService
 * 基础业务组件
 * 其他业务组件接口继承该接口
 *
 * @author 郭文梁
 * @date 2018/11/12
 */
public interface BaseService<T> {
    /**
     * 查询所有
     *
     * @return 查询结果
     */
    List<T> list();

    /**
     * 分页查询
     *
     * @param page 页数
     * @param size 每页大小
     * @return 查询结果
     */
    List<T> list(int page, int size);

    /**
     * 获取数据库中记录的总数量
     *
     * @return count
     */
    int totalCount();

    /**
     * 保存数据
     *
     * @param o entity
     * @return result
     */
    @NotNull
    T save(T o);

    /**
     * 删除数据
     *
     * @param o Entity with id
     * @return deleted entity
     */
    T delete(T o);

    /**
     * delete by primary key
     *
     * @param id primary key
     * @return entity
     */
    T deleteById(Object id);

    /**
     * 搜索
     *
     * @param condition 搜索条件
     * @return 结果集
     */
    List<T> search(T condition);

    /**
     * 通过唯一主键朝朝
     *
     * @param id 主键
     * @return 结果实体
     */
    T get(Object id);

    /**
     * 更新信息
     *
     * @param o 实体
     * @return 修改结果
     */
    T update(T o);

    /**
     * 检查实体是否存在
     *
     * @param query 模板
     * @return 是否存在
     */
    boolean exists(T query);
}
